const Koa = require('Koa')
let app = new Koa() // 通过koa构建一个应用
    // koa里使用中间件 ，是一个回调函数
    // ctx :context
    // next -->转交中间件的权利给下一个中间件
    // 1.中间件是函数 2.中间件可以通过next 转交权限 3.中间件支持 async await
    // 4.中间件执行顺序 遵循 洋葱模型
let m1 = (ctx, next) => {
    console.log('第一个start');
    ctx.state = 100
    console.log(ctx.state);

    next()
    console.log('第一个end');
}
let m2 = (ctx, next) => {
    console.log("第二个中间件start");
    ctx.state -= 10;
    next(); // 调用m3
    console.log("第二个中间件end");
}
let m3 = (ctx, next) => {
    console.log("第三个中间件start");
    ctx.state -= 10;
    console.log(ctx.state);
    ctx.body = "最后的数据是" + ctx.state;
    console.log("第三个中间件end");
}

app.use(m1);
app.use(m2);
app.use(m3);
app.listen(8686)